package com.sugon.modules.mold.service;

import com.sugon.entity.DevMaintenThirdpartyCbEntity;
import com.sugon.entity.ModuleRepairRocordEntity;
import com.sugon.modules.base.service.IErmsBaseApproveManager;
import com.sugon.modules.device.model.vo.DevRepairExceptionParam;
import com.sugon.modules.mold.model.dto.MoldYearlyFaultStatDTO;
import com.sugon.modules.mold.model.vo.BaseRepairRecordParamVO;
import com.sugon.utils.PageUtils;

import java.util.Map;

/**
 * @author ： YuXD
 * @description： 模具紧急维护业务Service
 * @date ： 2020-08-04 下午 8:02
 * @version: 1.0
 */
public interface IMoldRepairRecordManager extends IErmsBaseApproveManager {

    /**
     * 提交模具维修单进行审核
     * 1、修改计划状态信息
     * 2、发送审批消息
     *
     * @param moduleRepairRocord 模具维修工单
     * @return
     */
    boolean commitApprove(ModuleRepairRocordEntity moduleRepairRocord);

    /**
     * 分页查询模具维修记录
     *
     * @param params
     * @return
     */
    PageUtils queryList(Map<String, Object> params);

    /**
     * 模具故障报修
     *
     * @param moduleRepairRocord
     * @return
     */
    boolean callRepair(ModuleRepairRocordEntity moduleRepairRocord);

    /**
     * 维修工确认开始维修工单
     * 1、更新派工单
     * 2、更新维修工单状态
     * 3、开启30分钟或者120分钟倒计时
     *
     * @param moldRepairRecord 设备维修工单
     * @return
     */
    boolean confirmRepair(ModuleRepairRocordEntity moldRepairRecord);

    /**
     * 维修工添加维修记录
     *
     * @param repairRecordParam 工单维修记录信息
     * @return
     */
    boolean addRepairRecord(BaseRepairRecordParamVO<ModuleRepairRocordEntity> repairRecordParam);

    /**
     * 维修工-维修完成,需要做以下事项
     * 更新维修记录中
     * 更新工单
     * 删除倒计时
     * 发送消息给生产班组长
     *
     * @param moldRepairRocord 模具紧急维护记录
     * @return
     */
    boolean completeRepair(ModuleRepairRocordEntity moldRepairRocord);

    /**
     * 添加设备维修异常记录
     *
     * @param devRepairExceptionParam 设备维修过程中发现的异常信息
     * @return
     */
    boolean addDevMaintenanceException(DevRepairExceptionParam devRepairExceptionParam);

    /**
     * 处理thinwork模具维修过程回调
     *
     * @param callbackData 回调数据
     * @return
     */
    ModuleRepairRocordEntity handThirdPartyCallback(DevMaintenThirdpartyCbEntity callbackData);

    /**
     * 进行模具年度故障统计，统计内容为故障次数和时长
     *
     * @param yearly   年度
     * @param moldCode 模具编码
     * @return
     */
    Map<Integer, MoldYearlyFaultStatDTO> doYearlyMoldFaultStat(Integer yearly, String moldCode);

}
